import { getToken } from '@/utils/storage';
// uni.request 统一处理
// const BASE_URL = 'http://192.168.168.35:8888';
const BASE_URL = 'http://192.168.168.168:8888/';

// 统一处理数据请求
function request(options) {
	// 解构请求头参数
	const header = {
		'Content-Type': 'application/json;charset=utf-8',
		'tokenL': '',
	};
	// 当前请求不是登录时请求，在header中加上后端返回的token
	if (options.url != '/regressive/auth/wechat/doLogin') {
		const token = getToken();
		if (token) {
			header.token = token;
		}
	}
	if (options.show.loading) { // 显示加载中 效果
		uni.showLoading({
			title: '',
			mask: true,
		});
	}
	return new Promise((resolve, reject) => {
		uni.request({
			// 接口地址
			url: BASE_URL + options.url,
			// 请求的参数
			data: options.data || {},
			// 请求方式
			method: options.method || 'GET',
			// 请求超时
			timeout: 1000 * 360, // 六分钟
			// 返回的数据做一次 JSON.parse
			dataType: 'json',
			// 请求头
			header,
			// 请求成功返回
			success: (res) => {
				if (res.statusCode == 200) {
					if (res.data.code == 200) {
						if (options.show.success) {
							uni.showToast({
								icon: 'none',
								title: '操作成功',
								duration: 2000,
							});
						}
						resolve(res.data);
					} else if (res.data.code == 401) {
						uni.showModal({
							title: '提示',
							content: '登录过期 请重新登录',
							success(res) {
								if (res.confirm) {
									uni.navigateTo({ url: '/pages/login/login' }); // 去到登录页面
								} else if (res.cancel) {

								}
							},
						});
						reject(res);
					} else {
						// uni.showModal()
						uni.showToast({
							icon: 'none',
							title: res.data?.msg,
							duration: 2000,
						});
						reject(res);
					}
				} else {
					uni.showToast({
						icon: 'error',
						title: `${res.statusCode}`,
						duration: 2000,
					});
					reject(res);
				}
			},
			// 请求失败处理
			fail: (res) => {
				uni.showToast({
					icon: 'none',
					title: res.errMsg,
					duration: 2000,
				});
				reject(res);
			},
			// 完成之后关闭加载效果
			complete: () => {
				//  关闭正在等待的图标
				setTimeout(() => {
					uni.hideLoading();
				}, 1000);
			},
		});
	});
}

/**
 * get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 * @param {Object} show   show.loading  是否显示加载中 默认不显示加载中  show.success 成功是否提示 默认不提示
 */
export function get(url = '', params = {}, show = { loading: false, success: false }) {
	const options = {
		method: 'GET',
		url,
		show,
		data: {
			...params,
		},
	};
	return request(options);
}

/**
 * post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 * @param {Object} show   show.loading  是否显示加载中 默认不显示加载中  show.success 成功是否提示 默认不提示
 */
export function post(url = '', params = {}, show = { loading: false, success: false }) {
	const options = {
		method: 'POST',
		url,
		show,
		data: Array.isArray(params) ? params : { ...params },
	};
	return request(options);
}

/**
 * uploadFile 上传文件
 */
export function uploadFile(url = '', params, show = { loading: false, success: false }) {
	const token = getToken();
	uni.showLoading({
		mask: true,
		title: '上传中',
	});
	return new Promise((resolve, reject) => {
		uni.uploadFile({
			url: BASE_URL + url,
			name: 'file',
			filePath: params.filePath,
			formData: params.formData,
			header: {
				token,
			},
			success: (res) => {
				const resdata = JSON.parse(JSON.stringify(res));
				if (res.statusCode == 200) {
					const data = JSON.parse(resdata.data);
					if (data.code == 200) {
						uni.showToast({
							icon: 'none',
							title: '上传成功',
							duration: 2000,
						});
						resolve(data);
					} else if (data.code == 401) {
						uni.showModal({
							title: '提示',
							content: '登录过期 请重新登录',
							showCancel: false,
							success(res) {
								if (res.confirm) {
									uni.navigateTo({ url: '/pages/login/login' }); // 去到登录页面
								} else if (res.cancel) {

								}
							},
						});
						reject(res);
					} else {
						uni.showToast({
							icon: 'none',
							title: data?.msg,
							duration: 2000,
						});
						reject(res);
					}
				} else {
					uni.showToast({
						icon: 'none',
						title: res.data?.msg,
						duration: 2000,
					});
					reject(res);
				}
			},
			fail: (error) => {
				uni.showToast({
					icon: 'none',
					title: res.errMsg,
					duration: 2000,
				});
				reject(error);
			},
			complete: () => {
				setTimeout(() => {
					uni.hideLoading();
				}, 2000);
			},
		});
	});
}
